home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / DELPHI32 / GRAPHICS / IMGLIB95 / CEXPRO.TX_ / CEXPRO.TX
Text File  |  1996-03-31  |  34KB  |  704 lines

  1. NOTE: IN THE 32 BIT VERSION OF IMAGELIB, ALL INTEGERS ARE SHORTINTS
  2.  
  3. ImageLib 31/95 (c) 1995 by:
  4.  
  5. SkyLine Tools
  6. 1-800-404-3832
  7.  
  8.  
  9. Technical support  for C, C++, Kevin Adams:  (CIS) 74742,1444
  10.  
  11. ImageLib is an inexpensive way to add JPEG, GIF, BMP, PCX, PNG and TIFF
  12. graphic formats to your applications. Yes, there are image libraries
  13. supporting many more formats than imagelib, but those libraries are more
  14. expensive and carry more overhead to your applications.  The ImageLib DLL
  15. supports the reading and writing of JPEG, GIF, BMP, PCX, PNG, and TIFF images
  16. from memory or from a file. The ImageLib DLL supports the use of an optional
  17. callback function in the calling application.  The callback can provide
  18. progress displaying of read and write functions and the ability to cancel
  19. read functions in progress. The DLL also provides functions to retrieve 
  20. information about an image in memory or in a file without reading the whole
  21. image.  The functions return type of image, compression, width, height,
  22. bits per pixel, number of planes, and number of colors.  The memory functions
  23. of the Image Lite DLL are specifically designed to support database BLOB
  24. operations.  All calls return error codes and the DLL will optional display
  25. error messages.  The error codes refer to error text strings located in
  26. a string table resource inside the DLL.  The DLL supports Device Dependent
  27. Bitmaps(DDB) or Device Independent Bitmaps(DIB) in the reading and writing
  28. of images. The Image Lite DLL contains a sophisticated color quantization
  29. engine that can be used when reading and writing images.  When reading an image,
  30. settings can be used so that the bitmap that is returned is of the resolution
  31. you specify and is independent of the input image.  If the developer wants all
  32. images to be passed back as 256 color 8 bit dithered images then all bitmaps 
  33. passed back will be 8 bit whether they where originally 24 bit or 4 bit.  The
  34. color quantizer is designed to produce the best image possible at the desired
  35. resolution.  When writing an image the developer may specify the resolution of
  36. the image to be written and the image will be that be written (if that resolution
  37. is valid for the image type) at that resolution.  The ImageLib DLL also is Twain 
  38. complient and can be used with Twain complient devices such as scanners.  The DLL
  39. includes a SelectSource call to select a Twain Source and a AquireImage call to
  40. invoke the vender's Twain Source Manager and bring back an image.  Our Twain will
  41. work with 16 bit and 32 bit Twain Sources.
  42.  
  43. ImageLib includes examples for Borland C++ 4.0x and for MSVC++ version 1.5x.  The
  44. Borland examples are OWL examples and are located in the borland subdirectory. 
  45. The MSVC demo is an MFC example is is located in the msvc subdirectory.
  46.  
  47. Image Formats Supported:
  48.  
  49. JPEG 
  50. GIF
  51. PCX 
  52. BMP
  53. PNG
  54. TIF
  55.  
  56. Color Quantizer
  57.  
  58. The color quantizer is used to reduce an image to a lower bit depth with out
  59. loosing as much quality as possible.  The color quantizer will analysis the input
  60. image and produce an optimized color palette using the maximum number of colors
  61. allowed for the output bit depth.  The color quantizer will then reduce the input
  62. image by mapping the input image pixels to the output image pixels through the 
  63. optimize color palette.  This can be done with dithering or without dithering.  
  64. In most cases dithering produces better results.  Input images that have a bit
  65. depth of 8 or higher can be reduced.  Input images of 1 bit per pixel will not be 
  66. reduced.  The reduction options are:
  67.  
  68.    24 bit 16.7 million color to 8 bit 256 color
  69.    24 bit 16.7 million color to 4 bit 16 color
  70.    24 bit 16.7 million color to 4 bit 16 VGA colors (for VGA systems)
  71.    24 bit 16.7 million color to 1 bit 2 color
  72.    8 bit 256 color to 4 bit 16 color
  73.    8 bit 256 color to 4 bit 16 VGA colors
  74.    8 bit 256 color to 1 bit 2 color
  75.    4 bit 16 color to 1 bit 2 color
  76.    
  77.  
  78. Note that the 16 color output image is uses an optimized color palette based on
  79. the input image and not the windows system palette.  This means that with VGA 
  80. modes the 16 color output may not look good because the optimize 16 color 
  81. palette does not match the windows system palette.  The VGA 16 colors option 
  82. should be used for VGA systems.
  83.  
  84. All read calls also support the passing in of a handle to a windows logical
  85. color palette.  If a windows logical color palette handle is passed in the call
  86. then the DLL will use the passed in color palette and color reduce an image to
  87. match the input color palette.  When passing in a color palette, make sure that
  88. the request image output resolution matches the number of colors in the color 
  89. palette.
  90.  
  91.  
  92. DLL Calls
  93.  
  94. There are four different calls that essential do the same thing but either
  95. take their input differently or provide their output differently.  The first
  96. set will be described individually, but afterwards all four in a set will be
  97. listed followed by one description.
  98.  
  99. Before any calls are used the DLL must be properly initialized with the passcode.
  100. The DLL call is:
  101.  
  102. InitDll(HWND hwnd, const char *passcode);
  103.  
  104. hwnd is a application window handle and the passcode parameter is the passcode
  105. string "yk127e".  This must be called by an application once in order for the 
  106. DLL to work. 
  107.  
  108. ______________________________________________________________________________
  109.  
  110. int readjpgfile(const char *filename, int resolution, int scale, int dither,
  111.                 unsigned int * hddb, unsigned int * hpal,
  112.                 short (*pf) (int), short errormode);
  113.  
  114. This function is passed a filename of a JPG file; integer for resolution, scale,
  115. option, and returns unsigned integer pointers (Handles) to a
  116. HBITMAP and a HPALETTE to the resulting bitmap and palette.  It returns
  117. one on success or a negative integer indicating an error code on failure.
  118. The errormode parameter indicates whether or not the DLL will display error
  119. messages internally.  If the input JPG file contains a Grayscale image then
  120. the resolution and option input parameters will be automatically over-ridden.
  121.  
  122. resolution        1:  2 bit (2 colors)
  123.                         0:  4 bit VGA palette(16 colors)
  124.                         4:  4 bit    (16 colors)
  125.             8:  8 bit   (256 colors)
  126.             24: 24 bit  (16 Million colors)
  127.  
  128. scale            1:  1/1 normal size
  129.             2:  1/2 size    
  130.             4:  1/4 size
  131.             8:  1/8 size
  132.  
  133. dither                  0:  No dithering
  134.                         1:  Dither
  135.  
  136. hddb            Pointer to bitmap handle
  137.  
  138. hpal            Pointer to palette handle
  139.  
  140. pf            Pointer to a callback function defined as:
  141.                  short pf (int);
  142.  
  143. errormode               0 : Do not show error messages in DLL
  144.                         1 : Display error messages in DLL
  145.                 
  146. Hpal Notes:      The DLL checks the input palette handle.  If the value is NOT
  147.                  0 then the DLL will attempt to create a color palette from the
  148.                  handle.  It will then try to use that color palette for the 
  149.                  output image if color reduction is selected.  Otherwise, 
  150.                  the DLL will create an optimum color palette is color reduction
  151.                  is performed.
  152.  
  153. Callback Notes:  If no callback function is defined then pass NULL for pf.
  154.                  If a callback function is used then the function will be called
  155.                  periodically with an integer input value containing a value
  156.                  between 0 and 100 denoting how much of the current operation has
  157.                  been completed.  The application's callback function must return
  158.                  a short value indicating status.  A return of 1 means to continue
  159.                  with the function and a return of 0 means to cancel the
  160.                  function.  If the function gets back a 0 it will cancel the
  161.                  reading of the image and return a valid bitmap and palette handle
  162.                  containing as much of the image that was complete before being
  163.                  canceled.  The read function will still return a one value
  164.                  even if the function was canceled via the callback.
  165.  
  166. Errormode Notes: All of the DLL calls will return a 1 for success or a negative
  167.                  number that is an error code.   All of the error codes have
  168.                  text string equivalents located in a string table resource
  169.                  inside of the DLL.  The first example imgview illustrates how
  170.                  to access the strings.  If you want to control what error
  171.          messages are displayed to the user the use 0 so that the DLL
  172.                  will not automatically display error messages.
  173. _____________________________________________________________________________
  174.  
  175. JPEG FORMAT
  176. _____________________________________________________________________________
  177.  
  178. int rdjpgfiledib(const char *filename, int resolution, int scale, int dither,
  179.                  unsigned int *hdib, unsigned int hpal, short (*pf) (int),
  180.                  short errormode);
  181.  
  182. This function is the same as the "readjpgfile" function except that it return
  183. a pointer to a DIB (hdib) HANDLE rather that a pointer to a DDB and palette HANDLE.
  184.  
  185. hdib             Pointer to a DIB handle.
  186.  
  187. hpal             Value of a logical palette handle. Nothing is returned with
  188.                  this parameter.  It is input only. It contain 0 or an optional
  189.                  handle to a color palette for color reduction.
  190. ______________________________________________________________________________
  191.  
  192.  
  193. int readjpgstream(void * inbuffer, long size, int resolution, int scale,
  194.                   int dither, unsigned int * hddb, unsigned int * hpal,
  195.                   short (*pf) (int), short errormode);
  196.  
  197.  
  198. This function is the equivalent to the "readjpgfile" function above except that
  199. input is from a pointer to a global memory location that contains a JPEG image
  200. and the size input parameter contains the size of the JPEG image in bytes.  
  201.  
  202. inbuffer            A pointer to a memory location that contain the input image.
  203.                     The memory location should have preferably been globally
  204.                     allocated.
  205.  
  206. size                This is a long value containing the number of bytes in
  207.                     the buffer.
  208.  
  209. _____________________________________________________________________________
  210.  
  211. int rdjpgstreamdib(void * inbuffer, long size, int resolution, int scale,
  212.                   int dither, unsigned int * hdib, unsigned int hpal,
  213.                   short (*pf) (int), short errormode);
  214.  
  215. This is the same as the "readjpgstream" except it returns a DIB
  216. HANDLE rather than a DDB and Palette HANDLE.
  217. _____________________________________________________________________________
  218.  
  219. int writejpegfile(const char * filename,  int quality, int smooth, int resolution, 
  220.                   unsigned int hddb, unsigned int hpal, short (*pf)(int),
  221.                   short errormode);
  222.  
  223. int writejpegstream(void * inbuffer, long * size,  int quality, int smooth,
  224.                     int resolution, unsigned int hddb, unsigned int hpal,
  225.                     short (*pf)(int), short errormode);
  226.  
  227. int wrjpegfiledib(const char * filename,  int quality, int smooth, int resolution, 
  228.                   unsigned int hdib, short (*pf)(int), short errormode);
  229.  
  230. int wrjpegstreamdib(void * inbuffer, long * size,  int quality, int smooth,
  231.                     int resolution, unsigned int hdib, short (*pf)(int),
  232.                     short errormode);
  233.  
  234. These functions are passed a filename or a pointer to a buffer or size to write a
  235. JPEG image to.  The inputs are either HANDLES to a DDB and logical palette or 
  236. a HANDLE to a DIB.  The quality and smooth parameters describe the amount of 
  237. compression and any smoothing desired.  Output size of the file or memory stream 
  238. is based on the size input and the value of the quality parameter.  
  239.  
  240. filename                A pointer to a string containing a name and path of 
  241.                         output file.
  242.  
  243. inbuffer                A pointer to a memory location where the output image
  244.                         will be written.
  245.  
  246. size                    A pointer to a long value that will indicate on return
  247.                         how much of the memory location was actually used to
  248.                         store the output image.
  249.  
  250. quality         0..100   
  251.             0 is poor and 100 excellent.  We  normally use
  252.                         75 to have a reasonable quality with 1/10 savings
  253.                         in size from 24-bit data.
  254.  
  255. smooth            0..100    
  256.             0 is no smoothing  and 100  is full smoothing. 
  257.  
  258. resolution              24 write a 24 bit JPEG image
  259.                         1  write a 8 bit JPEG grayscale image
  260.  
  261. hddb            Device Dependent Bitmap handle (not a pointer!)
  262.  
  263. hpal             Logical Palette handle (not a pointer!)
  264.  
  265. hdib                    Device Independent Bitmap handle(not a pointer!)
  266.  
  267. pf             Pointer to a callback function defined as:
  268.                  short pf (int);
  269.                 
  270. Callback Notes:  For write functions the callback return value is not used.
  271.                  It is not possible to cancel a write function.
  272. ______________________________________________________________________________
  273.  
  274. GIF FORMAT
  275. _____________________________________________________________________________
  276.  
  277.  
  278. int readgiffile(const char *filename, int resolution, int dither,
  279.                 unsigned int * hddb, unsigned int * hpal, short (*pf)(int),
  280.                 short errormode);
  281.  
  282. int readgifstream(void * inbuffer, long size, int resolution, int dither,
  283.                   unsigned int * hddb, unsigned int * hpal,
  284.                   short(*pf)(int), short errormode);
  285.  
  286. int rdgiffiledib(const char *filename, int resolution, int dither, 
  287.                  unsigned int * hdib, unsigned int hpal,
  288.                  short (*pf)(int), short errormode);
  289.  
  290. int rdgifstreamdib(void * inbuffer, long size, int resolution, int dither,
  291.                    unsigned int * hdib, unsigned int hpal,
  292.                    short(*pf)(int), short errormode);
  293.  
  294. These functions take as input a file or memory stream pointing to a GIF image.
  295. It returns pointers to a bitmap Handle and a palette Handle or a DIB Handle.
  296. A return value of one is success,  a negative number is failure and refers
  297. to an error code.  The bitmap returned will be based on the resolution and
  298. dither parameters.  The output will have a bit depth equal to the resolution
  299. no matter what the input resolution is.  The Dither parameter indicates to
  300. use dithering if the color quantitization engine is going to reduce the bit
  301. depth of the input image. Interlaced and non-interlaced GIF images are 
  302. supported.
  303. ______________________________________________________________________________
  304.  
  305. int writegiffile(const char * filename,  int resolution,
  306.                  unsigned int hddb, unsigned int hpal, short (*pf)(int),
  307.                  short errormode);
  308.  
  309. int writegifstream(void * inbuffer, long * size,  int resolution, 
  310.                    unsigned int hddb, unsigned int hpal,
  311.                    short (*pf)(int), short errormode);
  312.  
  313. int wrjgiffiledib(const char * filename,  int resolution, 
  314.                   unsigned int hdib, short (*pf)(int), short errormode);
  315.  
  316. int wrgifstreamdib(void * inbuffer, long * size,  int resolution,
  317.                    unsigned int hdib, short (*pf)(int), short errormode);
  318.  
  319. These functions are passed a filename or a pointer to a buffer or size to write a
  320. GIF image to.  The inputs are either HANDLES to a DDB and logical palette or 
  321. a HANDLE to a DIB.  The resolution parameter describes the bit depth of the output
  322. image.  For GIF images a 24 bit output bit depth is invalid. Output size of the file
  323. or memory stream is based on the size input and the value of the resolution
  324. parameter.  The input bitmap's bit depth will be raised or lowered as necessary
  325. according to the resolution parameter. Output image is not interlaced. The DLL 
  326. supports the GIF 87a standard.
  327.  
  328. ______________________________________________________________________________
  329.  
  330. PCX FORMAT
  331. _____________________________________________________________________________
  332.  
  333. int readpcxfile(const char *filename, int resolution, int dither,
  334.                 unsigned int * hddb, unsigned int * hpal, short (*pf)(int),
  335.                 short errormode);
  336.  
  337. int readpcxstream(void * inbuffer, long size, int resolution, int dither,
  338.                   unsigned int * hddb, unsigned int * hpal,
  339.                   short(*pf)(int), short errormode);
  340.  
  341. int rdpcxfiledib(const char *filename, int resolution, int dither, 
  342.                  unsigned int * hdib, unsigned int hpal,
  343.                  short (*pf)(int), short errormode);
  344.  
  345. int rdpcxstreamdib(void * inbuffer, long size, int resolution, int dither,
  346.                    unsigned int * hdib, unsigned int hpal,
  347.                    short(*pf)(int), short errormode);
  348.  
  349. These functions take as input a file or memory stream pointing to a PCX image.
  350. It returns pointers to a bitmap Handle and a palette Handle or a DIB Handle.
  351. A return value of one is success,  a negative number is failure and refers
  352. to an error code.  The bitmap returned will be based on the resolution and
  353. dither parameters.  The output will have a bit depth equal to the resolution
  354. no matter what the input resolution is.  The Dither parameter indicates to
  355. use dithering if the color quantitization engine is going to reduce the bit
  356. depth of the input image. 
  357.  
  358. ______________________________________________________________________________
  359.  
  360. int writepcxfile(const char * filename,  int resolution, 
  361.                  unsigned int hddb, unsigned int hpal, short (*pf)(int),
  362.                  short errormode);
  363.  
  364. int writepcxstream(void * inbuffer, long * size,  int resolution, 
  365.                    unsigned int hddb, unsigned int hpal,
  366.                    short (*pf)(int), short errormode);
  367.  
  368. int wrpcxfiledib(const char * filename,  int resolution, 
  369.                   unsigned int hdib, short (*pf)(int), short errormode);
  370.  
  371. int wrpcxstreamdib(void * inbuffer, long * size,  int resolution,
  372.                    unsigned int hdib, short (*pf)(int),
  373.                    short errormode);
  374.  
  375. These functions are passed a filename or a pointer to a buffer or size to write a
  376. PCX image to.  The inputs are either HANDLES to a DDB and logical palette or 
  377. a HANDLE to a DIB.  The resolution parameter describes the bit depth of the output
  378. image.  Output size of the file or memory stream is based on the size input
  379. and the value of the resolution parameter.  The input bitmap's bit depth
  380. will be raised or lowered as necessary according to the resolution parameter. 
  381.  
  382. ______________________________________________________________________________
  383.  
  384. BMP FORMAT
  385. _____________________________________________________________________________
  386.  
  387. int readbmpfile(const char *filename, int resolution, int dither,
  388.                 unsigned int * hddb, unsigned int * hpal, short (*pf)(int),
  389.                 short errormode);
  390.  
  391. int readbmpstream(void * inbuffer, long size, int resolution, int dither,
  392.                   unsigned int * hddb, unsigned int * hpal,
  393.                   short(*pf)(int), short errormode);
  394.  
  395. int rdbmpfiledib(const char *filename, int resolution, int dither, 
  396.                  unsigned int * hdib, unsigned int hpal,
  397.                  short (*pf)(int), short errormode);
  398.  
  399. int rdbmpstreamdib(void * inbuffer, long size, int resolution, int dither,
  400.                    unsigned int * hdib, unsigned int hpal,
  401.                    short(*pf)(int), short errormode);
  402.  
  403. These functions take as input a file or memory stream pointing to a BMP image.
  404. It returns pointers to a bitmap Handle and a palette Handle or a DIB Handle.
  405. A return value of one is success,  a negative number is failure and refers
  406. to an error code.  The bitmap returned will be based on the resolution and
  407. dither parameters.  The output will have a bit depth equal to the resolution
  408. no matter what the input resolution is.  The Dither parameter indicates to
  409. use dithering if the color quantitization engine is going to reduce the bit
  410. depth of the input image.  The input BMP image must contain the BITMAPFILEHEADER
  411. part of a BMP at the front before the BITMAPINFOHEADER.  The read BMP functions 
  412. do support RLE type BMP files.
  413.  
  414. ______________________________________________________________________________
  415.  
  416. int writebmpfile(const char * filename,  int resolution, 
  417.                  unsigned int hddb, unsigned int hpal, short (*pf)(int),
  418.                  short errormode);
  419.  
  420. int writebmpstream(void * inbuffer, long * size,  int resolution, 
  421.                    int password, unsigned int hddb, unsigned int hpal,
  422.                    short (*pf)(int), short errormode);
  423.  
  424. int wrbmpfiledib(const char * filename,  int resolution,
  425.                   unsigned int hdib, short (*pf)(int), short errormode);
  426.  
  427. int wrbmpstreamdib(void * inbuffer, long * size,  int resolution,
  428.                    unsigned int hdib, short (*pf)(int),
  429.                    short errormode);
  430.  
  431. These functions are passed a filename or a pointer to a buffer or size to write a
  432. BMP image to.  The inputs are either HANDLES to a DDB and logical palette or 
  433. a HANDLE to a DIB.  The resolution parameter describes the bit depth of the output
  434. image.  Output size of the file or memory stream is based on the size input
  435. and the value of the resolution parameter.  The input bitmap's bit depth
  436. will be raised or lowered as necessary according to the resolution parameter. 
  437.  
  438. ______________________________________________________________________________
  439.  
  440. PNG FORMAT
  441. _____________________________________________________________________________
  442.  
  443.  
  444. int readpngfile(const char *filename, int resolution, int dither,
  445.                 unsigned int * hddb, unsigned int * hpal, short (*pf)(int),
  446.                 short errormode);
  447.  
  448. int readpngstream(void * inbuffer, long size, int resolution, int dither,
  449.                   unsigned int * hddb, unsigned int * hpal,
  450.                   short(*pf)(int), short errormode);
  451.  
  452. int rdpngfiledib(const char *filename, int resolution, int dither, 
  453.                  unsigned int * hdib, unsigned int hpal,
  454.                  short (*pf)(int), short errormode);
  455.  
  456. int rdpngstreamdib(void * inbuffer, long size, int resolution, int dither,
  457.                    unsigned int * hdib, unsigned int hpal,
  458.                    short(*pf)(int), short errormode);
  459.  
  460. These functions take as input a file or memory stream pointing to a PNG image.
  461. It returns pointers to a bitmap Handle and a palette Handle or a DIB Handle.
  462. A return value of one is success,  a negative number is failure and refers
  463. to an error code.  The bitmap returned will be based on the resolution and
  464. dither parameters.  The output will have a bit depth equal to the resolution
  465. no matter what the input resolution is.  The Dither parameter indicates to
  466. use dithering if the color quantitization engine is going to reduce the bit
  467. depth of the input image. 
  468.  
  469. ______________________________________________________________________________
  470.  
  471. int writepngfile(const char * filename,  int resolution, int interlaced,
  472.                  unsigned int hddb, unsigned int hpal,
  473.                  short (*pf)(int), short errormode);
  474.  
  475. int writepngstream(void * inbuffer, long * size,  int resolution, int interlaced, 
  476.                    unsigned int hddb, unsigned int hpal,
  477.                    short (*pf)(int), short errormode);
  478.  
  479. int wrpngfiledib(const char * filename,  int resolution, int interlaced, 
  480.                  unsigned int hdib, short (*pf)(int),
  481.                  short errormode);
  482.  
  483. int wrpngstreamdib(void * inbuffer, long * size,  int resolution, int interlaced,
  484.                    unsigned int hdib, short (*pf)(int),
  485.                    short errormode);
  486.  
  487. interlaced :     1 - write an interlaced type PNG image
  488.                  0 - write a non-interlaced type PNG image
  489.  
  490. These functions are passed a filename or a pointer to a buffer or size to write a
  491. PNG image to.  The inputs are either HANDLES to a DDB and logical palette or 
  492. a HANDLE to a DIB.  The resolution parameter describes the bit depth of the output
  493. image.  Output size of the file or memory stream is based on the size input
  494. and the value of the resolution parameter.  The input bitmap's bit depth
  495. will be raised or lowered as necessary according to the resolution parameter. The
  496. interlaced parameter indicated to write an interlaced PNG file when it is one and
  497. a non-interlaced parameter when it is 0.
  498.  
  499. ______________________________________________________________________________
  500.  
  501. TIFF FORMAT
  502. _____________________________________________________________________________
  503.  
  504.  
  505. int readtiffile(const char *filename, int resolution, int dither,
  506.                 unsigned int * hddb, unsigned int * hpal, short (*pf)(int),
  507.                 short errormode);
  508.  
  509. int readtifstream(void * inbuffer, long size, int resolution, int dither,
  510.                   unsigned int * hddb, unsigned int * hpal,
  511.                   short(*pf)(int), short errormode);
  512.  
  513. int rdtiffiledib(const char *filename, int resolution, int dither, 
  514.                  unsigned int * hdib, unsigned int hpal,
  515.                  short (*pf)(int), short errormode);
  516.  
  517. int rdtifstreamdib(void * inbuffer, long size, int resolution, int dither,
  518.                    unsigned int * hdib, unsigned int hpal,
  519.                    short(*pf)(int), short errormode);
  520.  
  521. These functions take as input a file or memory stream pointing to a TIF image.
  522. It returns pointers to a bitmap Handle and a palette Handle or a DIB Handle.
  523. A return value of one is success,  a negative number is failure and refers
  524. to an error code.  The bitmap returned will be based on the resolution and
  525. dither parameters.  The output will have a bit depth equal to the resolution
  526. no matter what the input resolution is.  The Dither parameter indicates to
  527. use dithering if the color quantitization engine is going to reduce the bit
  528. depth of the input image. The DLL meets the TIF baseline specifications and 
  529. will support TIF images from 1 to 24 bits and will read TIFF images of the 
  530. following types:
  531.  
  532.     No Compression
  533.     Packbits
  534.     LZW 
  535.     CCITT Group 3 (1 bit only)
  536.  
  537. ______________________________________________________________________________
  538.  
  539. int writetiffile(const char * filename,  int compression, int stripsize,
  540.                  int resolution, unsigned int hddb, unsigned int hpal,
  541.                  short (*pf)(int), short errormode);
  542.  
  543. int writetifstream(void * inbuffer, long * size,  int compression, 
  544.                    int stripsize, int resolution, unsigned int hddb,
  545.                    unsigned int hpal, short (*pf)(int), short errormode);
  546.  
  547. int wrtiffiledib(const char * filename,  int compression, int stripsize, 
  548.                  int resolution, unsigned int hdib, short (*pf)(int),
  549.                  short errormode);
  550.  
  551. int wrtifstreamdib(void * inbuffer, long * size,  int compression,
  552.                    int stripsize, int resolution, unsigned int hdib,
  553.                    short (*pf)(int), short errormode);
  554.  
  555. compression :      1 - No compression
  556.                    2 - CCITT compression (1 bit; not supported at this time)
  557.                    5 - LZW compression
  558.                    32773 - PackBits compression
  559.  
  560. stripsize :        An integer value indicating the number of different strips
  561.                    to separate the image into.
  562.  
  563. These functions are passed a filename or a pointer to a buffer or size to write a
  564. PNG image to.  The inputs are either HANDLES to a DDB and logical palette or 
  565. a HANDLE to a DIB.  The resolution parameter describes the bit depth of the output
  566. image.  Output size of the file or memory stream is based on the size input
  567. and the value of the resolution parameter.  The input bitmap's bit depth
  568. will be raised or lowered as necessary according to the resolution parameter. The
  569. compression parameter indicated the type of compression to use. 
  570. ______________________________________________________________________________
  571.  
  572. int fileinfo(const char * filename, char * filetype, int * width, int * height,
  573.              int * bitspixel, int * planes, int * numcolors, char * compression,
  574.              short errormode);
  575.  
  576. This function takes the filename of an image and returns information about the
  577. image.  This function works with BMP, JPG, GIF, PNG, and PCX images.  It is
  578. not dependent on file extension and will identify if a file is one of the above
  579. image types no matter what the extension is.  If the function cannot
  580. correctly identify a file it will return a negative number indicating and
  581. error code, otherwise a 1.  All of the other parameters are pointer to
  582. variables that will be filled by the function.
  583.  
  584. filetype            This character pointer will contain the type of image
  585.                     contained in the file.
  586.         
  587. width               The width of the image in pixels
  588.  
  589. height            The height of the image in pixels
  590.  
  591. bitspixel        The pixel depth, or bits per pixel, of the image
  592.  
  593. planes            The number of bit planes in the image
  594.  
  595. numcolors            The number of palette entries used by the image.
  596.                     Will be 0 for RGB or true color images.
  597.  
  598. compression         Type of compression used for the image or other useful
  599.                     information.  For JPEG and PNG images this variable will
  600.                     indicate a RGB or Grayscale colorspace type for the image.
  601.  
  602. errormode           0 : do not show errors
  603.                     1 : show errors
  604. ___________________________________________________________________________
  605.  
  606. int streaminfo(void * inbuffer, long size, char * filetype, int * width,
  607.                int * height, int * bitspixel, int * planes, int * numcolors,
  608.                char * compression, short errorcode);
  609.  
  610. This function is similar to the fileinfo function except that is identifies
  611. the type of image that is in the input buffer rather than a file.  It is
  612. recommended that the entire image be in memory when trying to use this function.
  613. While the function may work with a incomplete function because in many cases
  614. it just scans the image header it is not certified to work that way.
  615. ___________________________________________________________________________
  616.  
  617. TWAIN
  618. _____________________________________________________________________________
  619.  
  620. int twainavailable(HWND hwind, short errormode);
  621.  
  622. This call will check the windows environment to see if Twain is currently 
  623. available.  It will check for the "TWAIN.DLL" DLL and it will check to make
  624. sure there is at lease one Source Manager installed on the system.  A one 
  625. indicates that Twain is available and a negative number indicates an errorcode.
  626. If a negative number returns check to ensure that the Twain software was 
  627. correctly installed by the Twain complient device.
  628.  
  629. hwind:      A handle to a application window
  630.  
  631. errormode:  0:  The DLL will not display error messages.
  632.             1:  Dll will display error messages.
  633. ______________________________________________________________________________
  634.  
  635. int selectsource(HWND hwind, short errormode);
  636.  
  637. This call will bring up the Twain source selection window which allows the user
  638. to specify the Twain Source Manager they want to use.  This is for systems that
  639. have more that one Twain Source loaded.  It will return a 1 if no errors or a
  640. negative number for an error.  Selecting "Cancel" in the window is not an error.
  641. _______________________________________________________________________________
  642.  
  643.  int aquireimage(HWND hwind, int resolution, int dither, int hideUI,
  644.              unsigned int * hddb, unsigned int * hpal,
  645.              short (*pf)(int), short errormode);
  646.  
  647. This call will open up the currently selected Twain Source (If no Source has
  648. been selected the default will be used) and start up the Source Manager for the
  649. Twain device to allow the user to control that device.  Once the user has finished
  650. with the device a handle to the BITMAP and PALETTE where the image will be stored.
  651. The hideUI option is not currently used and the other parameters are the same as 
  652. if reading an image.
  653. ________________________________________________________________________________
  654.  
  655. The DLL can also be used with other languages besides C.  There is a Delphi
  656. vcl components available the same DLL.
  657.  
  658. Technical Support and questions:
  659.  
  660. Kevin Adams: compuserve 74742,1444  or   
  661. Internet : 74742,1444@compuserve.com
  662.  
  663.  
  664. Address:
  665.  
  666. SkyLine Tools
  667. Attn: Jan Dekkers
  668. 11956 Riverside Drive 206
  669. North Hollywood CA 91607
  670. Phone 818 766-3900
  671. Fax: 818 766-9027
  672. ________________________________________________________________________________
  673.  
  674. License Agreement
  675.  
  676.  
  677. Rights and Limitations
  678. The software which accompanies this license ("ImageLib") is the property
  679. of SkyLine Tools or its licensers and is protected by copyright law.
  680. By using ImageLib you agree to the terms of this agreement. You may install one
  681. copy of the ImageLib product on a single computer. One copy of ImageLib may be
  682. only used by a single developer at a time.  When ImageLib is being used by
  683. an executable application then there are no licensing fees or royalties
  684. for distribution of the executable and the DLL.  Should any part of ImageLib
  685. be used in a non-compiled application, such as:  a value added VCL, VBX, OCX,
  686. royalties apply.      
  687.  
  688. Limited Warranty
  689. SkyLine Tools warrants that ImageLib will perform substantially in accordance
  690. with the accompanying documentation for a period of (90) days from the date
  691. of receipt.
  692.  
  693. Liabilities 
  694. SkyLine Tools and its licensers entire liability and your exclusive remedy
  695. shall be, at SkyLine Tools option, either return of the price paid,
  696. or repair or replacement of the ImageLib product.
  697.   
  698. Gif and Tiff uses LZW compression which is patented by Unisys. On
  699. CompuServe GO PICS to obtain information about the Unisys patents.
  700. By using ImageLib's GIF Read and Write features you acknowledge that
  701. SkyLine has notified you about the LZW patent and hold SkyLine harmless
  702. from any legal actions.
  703.  
  704.